package com.qf.controller;

import com.qf.utils.Result;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SysUserController {

    /**
     * 登录操作
     * @param username
     * @param password
     * @param rememberMe
     * @return
     */
    @RequestMapping("/doLogin")
    public Object login(String username, String password , boolean rememberMe){

        try {
            //获取subject对象（当前登录用户账户）
            Subject subject = SecurityUtils.getSubject();
            //对用户输入的密码加密
            password = new Md5Hash(password, username , 1024).toString();

            System.out.println("加密后的密码：" + password);
            //创建用户token对象
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            //执行登录操作， 把用户输入的账号密码 与 数据库中的账号密码校验(realm 中的用户信息)
            subject.login(token);
            //测试是否获取权限
//            System.out.println(subject.isPermitted("sys:user:add"));
            //测试是否获取角色
//            System.out.println(subject.hasRole("开发工程师"));
        } catch (UnknownAccountException e){
            e.printStackTrace();
            return Result.error("用户名不存在");
        } catch (IncorrectCredentialsException e){
            e.printStackTrace();
            return Result.error("密码不正确");
        } catch (LockedAccountException e){
            e.printStackTrace();
            return Result.error("账号密码被锁定");
        }
        return Result.ok("登录成功");
    }
}
